iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
自我挑戰組

數據新手村:統計系畢業生 30 天打怪升級之旅系列 第 9

Day 09 - 創建 NumPy 陣列與屬性詳解

  • 分享至 

  • xImage
  •  

大家好,歡迎來到數據新手村的第九天!在昨天的文章中,我們宏觀地介紹了 Olist 數據集的全貌,也認識了即將成為我們核心武器的 NumPy 函式庫。

理論說了再多,不如親自動手。今天,我們就要兌現承諾,正式在 PyCharm 中寫下我們的第一行 NumPy 程式碼,並深入探索我們所創造出來的 ndarray 陣列,究竟藏著哪些秘密。


撰寫第一行 NumPy 程式碼

讓我們打開 PyCharm,在 Numpy_Basics 資料夾中開啟我們的 Jupyter Notebook (.ipynb) 檔案。

事前準備:安裝 NumPy

在開始之前,請確認專案環境中已經安裝了 NumPy。如果還沒,請先在 PyCharm 下方的「終端機 (Terminal)」中輸入以下指令來安裝:

pip install numpy

程式碼實作:從 List 到 ndarray

最基礎的陣列創建,就是從 Python 的 list 開始。

# 引入 numpy 函式庫,並使用 np 作為通用簡稱
import numpy as np

# --- 1. ndarray 的特性:多維性 (Multi-dimensionality) ---
# ndarray 支援從 0 維到更高維度
# arr = numpy.array(5) 原本是這樣,前面設定numpy as np
arr_0d = np.array(5) # 創建0維的ndarray陣列
print(arr_0d)
print('arr_0d 的維度:', arr_0d.ndim) # 陣列的維度 ndim = number of dimensions

arr_1d = np.array([1, 2, 3]) # 創建1維的ndarray陣列
print(arr_1d)
print('arr_1d 的維度:', arr_1d.ndim) # 陣列的維度 ndim = number of dimensions

arr_2d = np.array([ [1, 2, 3], [4, 5, 6]]) # 創建2維的ndarray陣列
print(arr_2d)
print('arr_2d 的維度:', arr_2d.ndim) # 陣列的維度 ndim = number of dimensions

輸出結果:
5
arr_0d 的維度: 0

[1 2 3]
arr_1d 的維度: 1

[[1 2 3]
[4 5 6]]
arr_2d 的維度: 2

https://ithelp.ithome.com.tw/upload/images/20250922/20178546T82DhDTfr9.png

# --- 2. ndarray 的特性:同質性 (Homogeneity) ---
# ndarray 的所有元素必須是同一種數據類型,不同類型會被強制向上轉型
arr_str = np.array([1, "hello"])
print(f"混合數字與字串陣列: {arr_str}") # 數字 1 會被轉成字串 '1'

arr_float = np.array([1, 2.5])
print(f"混合整數與浮點數陣列: {arr_float}") # 整數 1 會被轉成浮點數 1.0

輸出結果:
混合數字與字串陣列: ['1' 'hello']

混合整數與浮點數陣列: [1. 2.5]

https://ithelp.ithome.com.tw/upload/images/20250922/20178546BuoWCWfy4N.png


NumPy 陣列的核心屬性

現在已經成功創建了 ndarray 物件,但這個物件內部究竟長什麼樣子?可以透過它的「屬性 (Attributes)」來一探究竟。

可以把「屬性」想像成是一個陣列的「身分證」或「規格表」。學會讀懂這些屬性,是未來進行陣列操作與除錯的基礎。

  1. .ndim - 陣列的維度
    .ndim 屬性告訴我們這個陣列是幾維的,剛剛在創建時已經看過了。

  2. .shape - 陣列的形狀
    .shape 屬性可能是最重要的屬性之一。它用一個元組 (tuple) 來表示陣列在「每一個維度」上的大小(例如:幾列 x 幾欄)。

  3. .size - 元素的總個數
    .size 屬性告訴我們這個陣列中總共有多少個元素。它等於 .shape 元組中所有數字的乘積。

  4. .dtype - 元素的資料類型
    .dtype (data type) 屬性揭示了陣列中元素的資料類型。由於 NumPy 的「同質性」特性,一個陣列只會有一個 dtype。

深入 dtype:為何 int8 最多到 127?
NumPy 提供了非常精細的資料類型,例如 int8, uint8 等。int8 代表使用 8 個位元 (bits) 儲存的「有號」整數。電腦會犧牲 1 個位元來表示正負號,剩下 7 個位元來表示數值,因此範圍是從 -128 到 127。而 uint8 (無號整數) 則將 8 個位元全部用於表示數值,範圍是 0 到 255。

  1. .T - 陣列的轉置
    .T 屬性可以將陣列的「行」和「列」互換,也就是數學上的「轉置 (Transpose)」。這在線性代數和矩陣運算中非常常用。

https://ithelp.ithome.com.tw/upload/images/20250922/20178546S7nLXPlZ5D.png

輸出結果:
1
陣列的維度: 0
陣列的形狀: ()
元素的個數: 1
元素的數據類型: int64
元素的轉置: 1

https://ithelp.ithome.com.tw/upload/images/20250922/201785464j0w3F3V6y.png

輸出結果:
[1. 2.5 3. ]
陣列的維度: 1
陣列的形狀: (3,)
元素的個數: 3
元素的數據類型: float64
元素的轉置: [1. 2.5 3. ]

https://ithelp.ithome.com.tw/upload/images/20250922/2017854632EQG7tPe6.png

輸出結果:
[[1 2 3]
[4 5 6]]
陣列的維度: 2
陣列的形狀: (2, 3)
元素的個數: 6
元素的數據類型: int64
元素的轉置:
[[1 4]
[2 5]
[3 6]]


結語

今天正式踏出了程式實作的第一步,不僅成功創建了 NumPy 陣列,還學會了如何檢視它的內部規格。在所有屬性中,請務必記住 .shape 和 .dtype,它們是未來判斷資料狀態最重要的兩個指標。

既然已經能看懂陣列的結構了,明天 Day 10,將學習 NumPy 中更多、更強大的陣列創建方法,學會如何「無中生有」,為各種情境快速產生需要的陣列。敬請期待!


上一篇
# Day 08 - Olist 數據集導覽與 NumPy 初體驗
下一篇
Day 10 - 精通 NumPy 陣列的創建方法
系列文
數據新手村:統計系畢業生 30 天打怪升級之旅24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言